package com.cs.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cs.context.BaseContext;
import com.cs.domain.Contact;
import com.cs.domain.User;
import com.cs.exception.BaseException;
import com.cs.mapper.IContactMapper;
import com.cs.mapper.IUserMapper;
import com.cs.result.Result;
import com.cs.service.ContactService;
import com.cs.vo.ContactVO;
import com.cs.vo.GetInfoContactVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;


@Service
public class ContactServiceImpl extends ServiceImpl<IContactMapper, Contact> implements ContactService {

    @Autowired
    private IUserMapper userMapper;

    /**
     * 根据手机号添加联系人
     *
     * @param contactPhone
     * @return
     */
    @Override
    public Result addContactByPhone(String contactPhone) {
        //获取当前用户id
        Integer userId = BaseContext.getCurrentId();
        //根据手机号查询用户
        QueryWrapper<User> userWrapper = new QueryWrapper<>();
        userWrapper.eq("phone", contactPhone);
        User contactUser = userMapper.selectOne(userWrapper);

        if (userId.equals(contactUser.getId())) {
            return Result.error("不能添加自己为联系人");
        }

        //判断是否已经添加
        QueryWrapper<Contact> contactWrapper = new QueryWrapper<>();
        contactWrapper.eq("contact_phone", contactPhone);
        Contact contact = getOne(contactWrapper);
        if (contact != null) {
            return Result.error("此联系人已添加");
        }

        //添加联系人
        Contact newContact = new Contact();
        newContact.setUserId(userId);
        newContact.setContactName(contactUser.getUsername());
        newContact.setContactPhone(contactPhone);
        newContact.setContactRole(contactUser.getRole());
        newContact.setCreateTime(LocalDateTime.now());
        save(newContact);
        return Result.success("添加成功");
    }

    /**
     * 根据手机号获取联系人信息
     *
     * @return
     */
    @Override
    public Result<GetInfoContactVO> getContactByPhone(String contactPhone) {
        //根据手机号查询用户
        QueryWrapper<User> userWrapper = new QueryWrapper<>();
        userWrapper.eq("phone", contactPhone);
        User contactUser = userMapper.selectOne(userWrapper);
        if (contactUser == null) {
            return Result.error("此手机号未注册"); // 未找到联系人
        }
        GetInfoContactVO getInfoContactVO = new GetInfoContactVO();
        //拷贝属性
        getInfoContactVO.setContactName(contactUser.getUsername());
        getInfoContactVO.setContactPhone(contactUser.getPhone());
        getInfoContactVO.setContactRole(contactUser.getRole());
        getInfoContactVO.setContactGender(contactUser.getGender());
        return Result.success(getInfoContactVO);
    }

    /**
     * 获取当前用户所有联系人
     *
     * @return
     */
    @Override
    public List<ContactVO> getAllContact(Integer currentUserId) {
        //创建一个List集合来存储查到的联系人信息
        List<ContactVO> List = new ArrayList<>();
        //创建一个查询条件对象
        QueryWrapper<Contact> queryWrapper = new QueryWrapper<>();
        //添加查询条件，根据当前用户id查询
        queryWrapper.eq("user_id", currentUserId);
        //查询联系人信息
        List<Contact> contactList = baseMapper.selectList(queryWrapper);
        //判断如果为空，抛出异常给前端
        if (contactList == null) {
            throw new BaseException("用户id为：" + currentUserId + "的联系人列表为空");
        }

        //遍历联系人列表
        for (Contact contact : contactList) {
            //创建一个ContactVO对象
            ContactVO contactVO = new ContactVO();
            //拷贝属性
            contactVO.setContactName(contact.getContactName());
            contactVO.setContactPhone(contact.getContactPhone());

            //将ContactVO对象添加到List集合中
            List.add(contactVO);
        }

        return List;
    }
}
